from exts import db
from datetime import datetime


# 用户表
class UserModel(db.Model):
    __tablename__ = "user"  # 表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 自增主键
    username = db.Column(db.String(100), nullable=False)  # 必填用户名
    password = db.Column(db.String(200), nullable=False)  # 加密后的密码
    email = db.Column(db.String(100), nullable=False, unique=True)  # # 唯一邮箱
    # 注册时间（自动记录），default为默认调用datetime.now函数
    join_time = db.Column(db.DateTime, default=datetime.now)


# 邮箱验证码表
class EmailCaptchaModel(db.Model):
    __tablename__ = "email_captcha"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    email = db.Column(db.String(100), nullable=False)  # 接收验证码的邮箱
    captcha = db.Column(db.String(100), nullable=False)  # 验证码内容
    used = db.Column(db.String(100), nullable=False)  # 是否已使用


# 问题表
class QuestionModel(db.Model):
    __tablename__ = 'question'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 问题ID
    title = db.Column(db.String(100), nullable=False)  # 问题标题
    content = db.Column(db.Text, nullable=False)  # 问题内容（支持长文本）
    create_time = db.Column(db.DateTime, default=datetime.now)  # 创建时间
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))  # 关联用户ID
    # 建立关系：通过question.author可以直接获取提问用户对象
    author = db.relationship(UserModel, backref="questions")


# 回答表
class AnswerModel(db.Model):
    __tablename__ = 'answer'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 回答ID
    content = db.Column(db.Text, nullable=False)  # 回答内容
    create_time = db.Column(db.DateTime, default=datetime.now)  # 回答时间
    question_id = db.Column(db.Integer, db.ForeignKey("question.id"))  # 所属问题ID
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))  # 回答者ID
    # 建立关系：通过answer.question获取对应问题对象，问题下的回答按时间倒序排列
    question = db.relationship(QuestionModel, backref=db.backref("answers", order_by=create_time.desc()))
    # 建立关系：通过answer.author获取回答者，用户的所有回答可通过user.answers获取
    author = db.relationship(UserModel, backref="answers")
